/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.general.bc;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.Distrito;
import org.cip.esymons.general.be.TipoZona;
import org.cip.esymons.general.be.Via;


/**
 *
 * @author ADMINISTRADOR
 */
@Stateless
public class DireccionPersonaFacade implements DireccionPersonaFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public void create(DireccionPersona direccionPersona) {
        em.persist(direccionPersona);
    }

    public void edit(DireccionPersona direccionPersona) {
        em.merge(direccionPersona);
    }

    public void remove(DireccionPersona direccionPersona) {
        DireccionPersona aux = em.merge(direccionPersona);
        em.remove(aux);
    }

    public DireccionPersona find(Object id) {
        return em.find(DireccionPersona.class, id);
    }

    public List<DireccionPersona> findAll() {
        return em.createQuery("select object(o) from DireccionPersona as o").getResultList();
    }

    public DireccionPersona buscaDireccionColegiado(Long codigo) {

        DireccionPersona direccion;
        List<DireccionPersona> listaDireccion;

        try {
            direccion = new DireccionPersona();
            listaDireccion = new ArrayList<DireccionPersona>();
            listaDireccion = em.createQuery("select object(o) from DireccionPersona as o where o.solCodigo.solCodigo=?1").setParameter(1, codigo).getResultList();
            if(listaDireccion.size()>0){
               direccion = listaDireccion.get(0);
            }
            return direccion;
        } catch (Exception ex) {
            return null;
        }
    }

    public List<DireccionPersona> listaDireccColegiado(Long codigo){

        try {
            return em.createQuery("select object(o) from DireccionPersona as o where o.solCodigo.solCodigo=?1").setParameter(1, codigo).getResultList();
        } catch (Exception ex) {
            return null;
        }
        
    }

    public DireccionPersona buscarDireccionNativo(Long codigo) {
     
       DireccionPersona direccion = new DireccionPersona();
       Via via = new Via();
       TipoZona tipoZona = new TipoZona();
       Distrito distrito = new Distrito();        
       Vector v = new Vector();
        try {
       
            v = (Vector) em.createNativeQuery("select dpe_direccion, dpe_dpto, dpe_etapa, dpe_interior, dpe_lote," +
                    "dpe_manzana, dpe_nombreZona, dpe_nro, dpe_piso, dpe_sector, via_codigo, zona_codigo," +
                    "dis_codigo from gen_direccion_persona where sol_codigo=?1 limit 1;").setParameter(1, codigo).getSingleResult();

            String dpeDireccion = (((Vector)v.elementAt(0)).get(0).toString());
            direccion.setDpeDireccion(dpeDireccion); System.out.println("ok1");
            direccion.setDpeDpto((((Vector)v.elementAt(0)).get(1).toString())); System.out.println("ok2");
            direccion.setDpeEtapa((((Vector)v.elementAt(0)).get(2).toString())); System.out.println("ok3");
            direccion.setDpeInterior((((Vector)v.elementAt(0)).get(3).toString())); System.out.println("ok4");
            direccion.setDpeLote((((Vector)v.elementAt(0)).get(4).toString())); System.out.println("ok5");
            direccion.setDpeManzana((((Vector)v.elementAt(0)).get(5).toString())); System.out.println("ok6");
            direccion.setDpenombreZona((((Vector)v.elementAt(0)).get(6).toString()));  System.out.println("ok7");
            direccion.setDpeNro(((Integer) (((Vector) (v.elementAt(0))).get(7))).intValue());  System.out.println("ok8");
            direccion.setDpePiso(((Integer) (((Vector) (v.elementAt(0))).get(8))).intValue()); System.out.println("ok9");
            direccion.setDpeSector((((Vector)v.elementAt(0)).get(9).toString()));  System.out.println("ok10");
            
            via = buscaVia(((Long) (((Vector) (v.elementAt(0))).get(10))).intValue());
            direccion.setViaCodigo(via);  System.out.println("ok11");

            tipoZona = buscaTipoZona(((Long) (((Vector) (v.elementAt(0))).get(11))).intValue());
            direccion.setZonaCodigo(tipoZona);  System.out.println("ok12");

            distrito = buscaDistrito(((Long) (((Vector) (v.elementAt(0))).get(12))).intValue());
            direccion.setDisCodigo(distrito);   System.out.println("ok13");

        } catch (Exception e) {
            System.out.println("Error.. " + e.toString());
        }
        return direccion;
    }

    public Via buscaVia(Object id) {
        return em.find(Via.class, id);
    }

    public TipoZona buscaTipoZona(Object id) {
        return em.find(TipoZona.class, id);
    }

    public Distrito buscaDistrito(Object id) {
        return em.find(Distrito.class, id);
    }

    
    public String buscarDireccionPersona(Long codigoSoli) {
        String direcTotal = "";
        String dir="";
        String tipZona="";
        String nomZona="";
        String distrito="";
        String provincia="";
        String departa="";
        try {
           
            DireccionPersona dirSol= (DireccionPersona) em.createQuery("Select dp from DireccionPersona as dp where dp.solCodigo.solCodigo=?1 and dp.dpeActivo=true").setParameter(1, codigoSoli).getSingleResult();
            if(dirSol!=null){
                dir=dirSol.getDpeDireccion();
                if(dir!=null){
                    direcTotal=dir;
                }else{
                    direcTotal="";
                }                
                if(dirSol.getZonaCodigo()!=null){
                    tipZona=dirSol.getZonaCodigo().getZonNombre();
                    direcTotal=direcTotal+" "+tipZona;
                }else{
                    direcTotal=direcTotal+"";
                }
                nomZona=dirSol.getDpenombreZona();
                if(nomZona!=null){
                    direcTotal=direcTotal+" "+nomZona;
                }else{
                    direcTotal=direcTotal+"";
                }                
                if(dirSol.getDisCodigo()!=null){
                    distrito=dirSol.getDisCodigo().getDisNombre();
                    direcTotal=direcTotal+" "+distrito;
                }else{
                    direcTotal=direcTotal+"";
                }                
                if(dirSol.getDisCodigo().getProCodigo()!=null){
                    provincia=dirSol.getDisCodigo().getProCodigo().getProNombre();
                    direcTotal=direcTotal+" "+provincia;
                }else{
                    direcTotal=direcTotal+"";
                }                
                if(dirSol.getDisCodigo().getProCodigo().getDepCodigo()!=null){
                    departa=dirSol.getDisCodigo().getProCodigo().getDepCodigo().getDepNombre();
                    direcTotal=direcTotal+" "+departa;
                }else{
                    direcTotal=direcTotal+"";
                }
                System.out.println("Bien direccion");
                return direcTotal;
            }else{
                System.out.println("direccion mal"+dirSol.getDpeDireccion());
                return null;
            }

        } catch (Exception e) {
            System.out.println("error"+e.toString());
            return null;
        }

        
    }

    public List<DireccionPersona> listarDireccionxSolicitante(Long id) {
        return em.createQuery("select object(o) from DireccionPersona as o where o.solCodigo.solCodigo=?1").setParameter(1, id).getResultList();
    }
}
